package com.zh.note.leetcode.array;

/**
 * 59. 螺旋矩阵 II
 * 给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
 * <p>
 * 输入：n = 3
 * 输出：[[1,2,3],[8,9,4],[7,6,5]]
 */
public class LC_59_GenerateMatrix {

    public static int[][] generateMatrix(int n) {
        int loop = 0; // 每个圈循环几次，例如n为奇数3，那么loop = 1 只是循环一圈，矩阵中间的值需要单独处理
        int start = 0; // 起点（start, start）
        int count = 1; // 用来给矩阵中每一个空格赋值
        int i, j;
        int[][] res = new int[n][n];
        while (loop++ < n / 2) {
            // 模拟填充上行从左到右(左闭右开)
            for (j = start; j < n - loop; j++) {
                res[start][j] = count++;
            }
            // 从上到下
            for (i = start; i < n - loop; i++) {
                res[i][j] = count++;
            }
            for (; j > start; j--) {
                res[i][j] = count++;
            }
            for (; i > start; i--) {
                res[i][j] = count++;
            }
            // 第二圈开始的时候，起始位置要各自加1， 例如：第一圈起始位置是(0, 0)，第二圈起始位置是(1, 1)
            start++;

        }
        // n是奇数，单独处理中间元素
        if (n % 2 == 1) {
            res[start][start] = count;
        }
        return res;
    }

    public static void main(String[] args) {

        generateMatrix(3);
    }
}
